using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using MakeIT.Framework.Util;
using MakeIT.SGI.ERP.Entidades;
using MakeIT.SGI.ERP.Negocios;
using System.Text;

namespace MakeIT.SGI.ERP.Apresentacao
{
    public partial class CadastroTitrec : System.Web.UI.Page
    {

        UsuarioVO usuarioVO = null;
        protected SgiDAOT SgiDAOT = null;
        protected Decimal saldoRecParcelamento = 0;
        protected string docOriRec = String.Empty;
        protected int idRecParcelamentoParcelaIdTitrec = 0;

        protected void Page_Load(object sender, EventArgs e)
        {
            this.SgiDAOT = new SgiDAOT();
            usuarioVO = (UsuarioVO)this.Session["userActive"];

            if (!IsPostBack)
            {
                Util.HabilitarCampos(false, this.panelCadRec);
                Util.HabilitarCampos(false, this.pnlRecebimentoRec);
                atualizarddlIdFilialRec(null, null);
                filtraFilialDDLRec(null, null);

                Session["parcelamentoReceber"] = null;

                carregaSituacaoRec();
                carregaParcelamentoRec(null);
                carregaParcelasRec(null);
            }

        }

        protected void Page_Unload(object sender, EventArgs e)
        {
            try
            {
                if (this.SgiDAOT != null)
                    this.SgiDAOT.closeDAO();
            }
            catch (Exception ex) { }
        }

        protected void grvResultadoRec_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            this.grvResultadoRec.PageIndex = e.NewPageIndex;
            btnPesquisaRec_Click(null, null);
        }
        protected void atualizarddlIdFilialRec(object sender, ImageClickEventArgs e)
        {
            CarregaDDL.carregaFilial(this.SgiDAOT, this.ddlCadIdFilialRec);

            CarregaDDL.carregaFilial(this.SgiDAOT, this.ddlIdFilialRec);

            CarregaDDL.carregaFilial(this.SgiDAOT, this.ddlRecFilial);
        }

        protected void atualizarDdlIdBancoRec(object sender, ImageClickEventArgs e)
        {
            CarregaDDL.carregaBanco(this.SgiDAOT, this.ddlCadIdBancoRec, Convert.ToInt32(ddlCadIdFilialRec.SelectedValue));

            CarregaDDL.carregaBanco(this.SgiDAOT, this.ddlIdBancoRec, Convert.ToInt32(ddlIdFilialRec.SelectedValue));

            CarregaDDL.carregaBanco(this.SgiDAOT, ddlRecBanco, Convert.ToInt32(ddlRecFilial.SelectedValue));
        }

        protected void atualizarDdlIdCtaCorRec(object sender, ImageClickEventArgs e)
        {
            CarregaDDL.carregaContaCorrente(this.SgiDAOT, this.ddlCadIdCtaCorRec, Convert.ToInt32(ddlCadIdFilialRec.SelectedValue), Convert.ToInt32(ddlCadIdBancoRec.SelectedValue));

            CarregaDDL.carregaContaCorrente(this.SgiDAOT, this.ddlIdCtaCorRec, Convert.ToInt32(ddlIdFilialRec.SelectedValue), Convert.ToInt32(ddlIdBancoRec.SelectedValue));

            CarregaDDL.carregaContaCorrente(this.SgiDAOT, this.ddlRecContaCorrente, Convert.ToInt32(ddlRecFilial.SelectedValue), Convert.ToInt32(ddlRecBanco.SelectedValue));
        }

        protected void atualizarddlIdCaixaRec(object sender, ImageClickEventArgs e)
        {
            CarregaDDL.carregaCaixa(this.SgiDAOT, this.ddlCadIdCaixaRec, Convert.ToInt32(ddlCadIdFilialRec.SelectedValue));

            CarregaDDL.carregaCaixa(this.SgiDAOT, this.ddlIdCaixaRec, Convert.ToInt32(ddlIdFilialRec.SelectedValue));

            CarregaDDL.carregaCaixa(this.SgiDAOT, this.ddlRecCaixa, Convert.ToInt32(ddlRecFilial.SelectedValue));

        }

        protected void atualizarddlCadIdClienteRec(object sender, ImageClickEventArgs e)
        {
            CarregaDDL.carregaCliente(this.SgiDAOT, this.ddlCadIdClienteRec, txtCadPesquisarClienteRec.Text, Convert.ToInt32(this.ddlCadIdFilialRec.SelectedValue));

            CarregaDDL.carregaCliente(this.SgiDAOT, this.ddlIdClienteRec, Convert.ToInt32(this.ddlIdFilialRec.SelectedValue));
        }

        protected void atualizarddlIdFormaPgtoRec(object sender, ImageClickEventArgs e)
        {
            CarregaDDL.carregaFormaPagamento(this.SgiDAOT, this.ddlCadIdFormaPgtoRec, Convert.ToInt32(ddlCadIdFilialRec.SelectedValue));

            CarregaDDL.carregaFormaPagamento(this.SgiDAOT, this.ddlIdFormaPgtoRec, Convert.ToInt32(ddlIdFilialRec.SelectedValue));

            CarregaDDL.carregaFormaPagamento(this.SgiDAOT, this.ddlRecFormaPagamento, Convert.ToInt32(ddlRecFilial.SelectedValue));

        }

        protected void atualizarddlIdPlnCtaRec(object sender, ImageClickEventArgs e)
        {
            CarregaDDL.carregaPlanoConta(this.SgiDAOT, this.ddlCadIdPlnCtaRec, Convert.ToInt32(ddlCadIdFilialRec.SelectedValue));

            CarregaDDL.carregaPlanoConta(this.SgiDAOT, this.ddlIdPlnCtaRec, Convert.ToInt32(ddlIdFilialRec.SelectedValue));
        }

        protected void atualizarddlIdCLucroRec(object sender, ImageClickEventArgs e)
        {
            CarregaDDL.carregaCentroLucro(this.SgiDAOT, this.ddlCadIdCLucroRec, Convert.ToInt32(ddlCadIdFilialRec.SelectedValue));

            CarregaDDL.carregaCentroLucro(this.SgiDAOT, this.ddlIdCLucroRec, Convert.ToInt32(ddlIdFilialRec.SelectedValue));
        }

        protected void carregaSituacaoRec()
        {
            CarregaDDL.carregaTituloPagarSituacao(ddlCadSituacaoRec, "TITULOPAGAR", false);
            CarregaDDL.carregaTituloPagarSituacao(ddlSituacaoRec, "TITULOPAGAR", true);
        }

        protected void carregaParcelamentoRec(List<TitrecVO> trVOLista)
        {
            gvRecParcelamento.DataSource = trVOLista;
            gvRecParcelamento.DataBind();

            this.txtRecParcelaQtd.Text = "1";
            this.txtRecParcelaVencimento.Text = DateTime.Now.ToShortDateString();

            if (gvRecParcelamento.Rows.Count <= 0)
            {
                Session["parcelamentoReceber"] = null;
                this.txtRecParcelaDocOri.Text = String.Empty;
                this.txtRecParcelaIdCliente.Text = String.Empty;
                this.hfRecParcelaIdCliente.Value = String.Empty;
                this.txtRecParcelaIdFilial.Text = String.Empty;
                this.hfRecParcelaIdFilial.Value = String.Empty;
                this.txtRecParcelaSaldo.Text = "0,00";
            }
            else
            {
                HiddenField hfRecParcelamentoIdCliente = (HiddenField)gvRecParcelamento.Rows[0].FindControl("hfRecParcelamentoIdCliente");
                HiddenField hfRecParcelamentoIdFilial = (HiddenField)gvRecParcelamento.Rows[0].FindControl("hfRecParcelamentoIdFilial");

                int idCliente = hfRecParcelamentoIdCliente.Value != null && !String.IsNullOrEmpty(hfRecParcelamentoIdCliente.Value) ? Convert.ToInt32(hfRecParcelamentoIdCliente.Value) : 0;
                if (idCliente != 0)
                {
                    hfRecParcelaIdCliente.Value = hfRecParcelamentoIdCliente.Value;
                    txtRecParcelaIdCliente.Text = this.SgiDAOT.getCliente(idCliente).pessoa;
                }

                int idFilial = Convert.ToInt32(hfRecParcelamentoIdFilial.Value);
                hfRecParcelaIdFilial.Value = hfRecParcelamentoIdFilial.Value;
                txtRecParcelaIdFilial.Text = this.SgiDAOT.getFilial(idFilial).filial;
            }
        }

        protected void carregaParcelasRec(List<TitrecVO> trVOLista)
        {
            gvRecParcelamentoResultado.DataSource = trVOLista;
            gvRecParcelamentoResultado.DataBind();
        }

        /// <summary>
        /// Manipula o evento do botão btnSalvarRec
        /// </summary>
        /// <param name="sender">Objeto disparador do evento</param>
        /// <param name="e">Argumento do evento</param>
        protected void btnSalvarRec_Click(object sender, EventArgs e)
        {

            //Declara objetos
            TitrecVO titrecVO = null;
            bool novoRegistro = false;

            try
            {
                //Verifica se o ID é nulo, se sim = cadastro novo
                if (string.IsNullOrEmpty(this.txtCadIdTitRec.Text))
                {
                    titrecVO = TitrecVO.CreateVO();
                    titrecVO.cadastro = DateTime.Now;
                    titrecVO.cadastradoPor = usuarioVO.user;

                    novoRegistro = true;

                }
                //Recupera dados para serem alterados
                else
                {
                    //Recupera dados
                    titrecVO = this.SgiDAOT.getTitrec(Int32.Parse(this.txtCadIdTitRec.Text));
                }

                titrecVO.idFilial = Int32.Parse(this.ddlCadIdFilialRec.SelectedValue);
                if (this.ddlCadIdCtaCorRec.SelectedValue.Equals("-1"))
                    titrecVO.idCtaCor = null;
                else
                    titrecVO.idCtaCor = Int32.Parse(this.ddlCadIdCtaCorRec.SelectedValue);
                if (this.ddlCadIdCaixaRec.SelectedValue.Equals("-1"))
                    titrecVO.idCaixa = null;
                else
                    titrecVO.idCaixa = Int32.Parse(this.ddlCadIdCaixaRec.SelectedValue);
                if (this.ddlCadIdClienteRec.SelectedValue.Equals("-1"))
                    titrecVO.idCliente = null;
                else
                    titrecVO.idCliente = Int32.Parse(this.ddlCadIdClienteRec.SelectedValue);
                if (this.ddlCadIdFormaPgtoRec.SelectedValue.Equals("-1"))
                    titrecVO.idFormaPgto = null;
                else
                    titrecVO.idFormaPgto = Int32.Parse(this.ddlCadIdFormaPgtoRec.SelectedValue);
                if (this.ddlCadIdPlnCtaRec.SelectedValue.Equals("-1"))
                    titrecVO.idPlnCta = null;
                else
                    titrecVO.idPlnCta = Int32.Parse(this.ddlCadIdPlnCtaRec.SelectedValue);
                if (this.ddlCadIdCLucroRec.SelectedValue.Equals("-1"))
                    titrecVO.idCLucro = null;
                else
                    titrecVO.idCLucro = Int32.Parse(this.ddlCadIdCLucroRec.SelectedValue);
                if (string.IsNullOrEmpty(this.txtCadNrDocRec.Text))
                    titrecVO.nrDoc = null;
                else
                    titrecVO.nrDoc = this.txtCadNrDocRec.Text;
                if (string.IsNullOrEmpty(this.txtCadObsRec.Text))
                    titrecVO.obs = null;
                else
                    titrecVO.obs = this.txtCadObsRec.Text;
                titrecVO.vcto = DateTime.Parse(this.txtCadVctoRec.Text);

                if (string.IsNullOrEmpty(this.txtCadPgtoRec.Text))
                    titrecVO.pgto = null;
                else
                    titrecVO.pgto = DateTime.Parse(this.txtCadPgtoRec.Text);

                titrecVO.situacao = Convert.ToChar(this.ddlCadSituacaoRec.SelectedValue);

                titrecVO.valor = decimal.Parse(this.txtCadValorRec.Text.Replace(".", ""));
                titrecVO.valorJuroC = decimal.Parse(this.txtCadValorRecJuroC.Text.Replace(".", ""));
                titrecVO.valorDescC = decimal.Parse(this.txtCadValorRecDescC.Text.Replace(".", ""));
                titrecVO.valorRec = decimal.Parse(this.txtCadValorPagoRec.Text.Replace(".", ""));

                decimal resultado = (decimal)((titrecVO.valor + titrecVO.valorJuroC) - (titrecVO.valorRec + titrecVO.valorDescC));

                if (resultado >= 0)
                {
                    if (titrecVO.situacao != 'F')
                    {
                        titrecVO.valorSaldo = resultado;
                        txtCadValorRecSaldo.Text = Convert.ToString(titrecVO.valorSaldo);
                    }
                    else
                    {
                        titrecVO.valorDescC += resultado;
                        titrecVO.valorSaldo = 0;
                        txtCadValorRecDescC.Text = Convert.ToString(titrecVO.valorDescC);
                        txtCadValorRecSaldo.Text = "0,00";

                        titrecVO.pgto = DateTime.Now;
                        this.txtCadPgtoRec.Text = titrecVO.pgto.Value.ToString("dd/MM/yyyy");
                    }
                }
                else
                {
                    Util.ExibeAlert(this, "O valor do saldo não pode ser menor que zero! Altere o valor do título!");
                    return;
                }

                if (string.IsNullOrEmpty(this.txtCadNrDocRecOri.Text))
                    titrecVO.nrDocOri = null;
                else
                    titrecVO.nrDocOri = this.txtCadNrDocRecOri.Text;
                titrecVO.edicao = DateTime.Now;
                titrecVO.editadoPor = usuarioVO.user;

                this.SgiDAOT.transactionBegin();

                //Chama metodo para salvar ou criar novo registro
                if (novoRegistro)
                {
                    titrecVO.idTitRec = (int)this.SgiDAOT.newTitrec(titrecVO);
                    this.SgiDAOT.newTitrechist(logTitrec(null, titrecVO));
                }
                else
                {
                    TitrechistVO trhVO = logTitrec(this.SgiDAOT.getTitrec(titrecVO.idTitRec), titrecVO);
                    if (trhVO != null)
                        this.SgiDAOT.newTitrechist(trhVO);
                    this.SgiDAOT.setTitrec(titrecVO);
                }

                this.SgiDAOT.transactionCommit();

                // Exibe msg de sucesso ao salvar registro
                Util.ExibeAlert(this, "Registro salvo com sucesso!");

                //Popula grid atualizado
                this.btnPesquisaRec_Click(null, null);

                //Atualiza formulario, apos salvar os dados
                this.txtCadIdTitRec.Text = titrecVO.idTitRec.ToString();
                this.ltCadastradoPorRec.Text = titrecVO.cadastradoPor;
                this.ltEditadoPorRec.Text = titrecVO.editadoPor;
                this.ltDataCadastroRec.Text = titrecVO.cadastro.ToString("dd/MM/yyyy");
                this.ltDataEdicaoRec.Text = titrecVO.edicao.ToString("dd/MM/yyyy");

                carregaTitrechist(titrecVO.idTitRec);
                carregaRecebimento(titrecVO.idTitRec);
                verificaRecParcelamentoAlteracao(titrecVO.idTitRec, titrecVO.situacao, (Decimal)titrecVO.valorSaldo, titrecVO.idCliente);
                atualizaGvParcelamentoRec(titrecVO.idTitRec, (Decimal)titrecVO.valorSaldo);
                idRecParcelamentoParcelaIdTitrec = titrecVO.idTitRec;
                carregaParcelasRec((List<TitrecVO>)Session["parcelamentoReceberParcela"]);
            }
            catch (Exception ex)
            {
                if (this.SgiDAOT != null)
                    this.SgiDAOT.transactionRollBack();
                Util.ExibeAlert(this, "Registro NÃO salvo! Erro: " + ex.Message);
            }
        }

        /// <summary>
        /// Manipula o evento do botão btnPesquisa
        /// </summary>
        /// <param name="sender">Objeto disparador do evento</param>
        /// <param name="e">Argumento do evento</param>
        protected void btnPesquisaRec_Click(object sender, EventArgs e)
        {

            //Declara objetos
            int? idTitRec = null;
            int? idFilial = null;
            int? idCtaCor = null;
            int? idCaixa = null;
            int? idCliente = null;
            int? idFormaPgto = null;
            int? idPlnCta = null;
            int? idCCusto = null;
            string nrDoc = null;
            char? situacao = null;
            string nrDocOri = null;
            int? idBanco = null;
            DateTime? vctoDe = null;
            DateTime? vctoAte = null;
            DateTime? pgtoDe = null;
            DateTime? pgtoAte = null;
            decimal? valorDe = null;
            decimal? valorAte = null;

            try
            {

                if (!string.IsNullOrEmpty(this.txtIdTitRec.Text))
                {
                    idTitRec = Int32.Parse(this.txtIdTitRec.Text);
                }

                if (!this.ddlIdFilialRec.SelectedValue.Equals("-1"))
                {
                    idFilial = Int32.Parse(this.ddlIdFilialRec.SelectedValue);
                }

                if (!this.ddlIdCtaCorRec.SelectedValue.Equals("-1"))
                {
                    idCtaCor = Int32.Parse(this.ddlIdCtaCorRec.SelectedValue);
                }

                if (!this.ddlIdCaixaRec.SelectedValue.Equals("-1"))
                {
                    idCaixa = Int32.Parse(this.ddlIdCaixaRec.SelectedValue);
                }

                if (!this.ddlIdClienteRec.SelectedValue.Equals("-1"))
                {
                    idCliente = Int32.Parse(this.ddlIdClienteRec.SelectedValue);
                }

                if (!this.ddlIdFormaPgtoRec.SelectedValue.Equals("-1"))
                {
                    idFormaPgto = Int32.Parse(this.ddlIdFormaPgtoRec.SelectedValue);
                }

                if (!this.ddlIdPlnCtaRec.SelectedValue.Equals("-1"))
                {
                    idPlnCta = Int32.Parse(this.ddlIdPlnCtaRec.SelectedValue);
                }

                if (!this.ddlIdCLucroRec.SelectedValue.Equals("-1"))
                {
                    idCCusto = Int32.Parse(this.ddlIdCLucroRec.SelectedValue);
                }

                if (!string.IsNullOrEmpty(this.txtNrDocRec.Text))
                {
                    nrDoc = this.txtNrDocRec.Text;
                }

                if (!this.ddlSituacaoRec.SelectedValue.Equals("0"))
                {
                    situacao = Convert.ToChar(this.ddlSituacaoRec.SelectedValue);
                }

                if (!string.IsNullOrEmpty(this.txtNrDocRecOri.Text))
                {
                    nrDocOri = this.txtNrDocRecOri.Text;
                }

                if (!this.ddlIdBancoRec.SelectedValue.Equals("-1"))
                {
                    idBanco = Int32.Parse(this.ddlIdBancoRec.SelectedValue);
                }

                //-------------- data vencimento ----------------------

                if (!string.IsNullOrEmpty(this.txtVctoDeRec.Text))
                {
                    vctoDe = DateTime.Parse(this.txtVctoDeRec.Text);
                }
                else if (!string.IsNullOrEmpty(this.txtVctoAteRec.Text))
                {
                    vctoDe = vctoAte;
                }

                if (!string.IsNullOrEmpty(this.txtVctoAteRec.Text))
                {
                    vctoAte = DateTime.Parse(this.txtVctoAteRec.Text);
                }
                else if (!string.IsNullOrEmpty(this.txtVctoDeRec.Text))
                {
                    vctoAte = vctoDe;
                }

                //-------------- data pagamento ----------------------

                if (!string.IsNullOrEmpty(this.txtPgtoDeRec.Text))
                {
                    pgtoDe = DateTime.Parse(this.txtPgtoDeRec.Text);
                }
                else if (!string.IsNullOrEmpty(this.txtPgtoAteRec.Text))
                {
                    pgtoDe = pgtoAte;
                }

                if (!string.IsNullOrEmpty(this.txtPgtoAteRec.Text))
                {
                    pgtoAte = DateTime.Parse(this.txtPgtoAteRec.Text);
                }
                else if (!string.IsNullOrEmpty(this.txtPgtoDeRec.Text))
                {
                    pgtoAte = pgtoDe;
                }

                //-------------- valor ----------------------

                if (!string.IsNullOrEmpty(this.txtValorDeRec.Text))
                {
                    valorDe = Decimal.Parse(this.txtValorDeRec.Text);
                }
                else if (!string.IsNullOrEmpty(this.txtValorAteRec.Text))
                {
                    valorDe = valorAte;
                }

                if (!string.IsNullOrEmpty(this.txtValorAteRec.Text))
                {
                    valorAte = Decimal.Parse(this.txtValorAteRec.Text);
                }
                else if (!string.IsNullOrEmpty(this.txtValorDeRec.Text))
                {
                    valorAte = valorDe;
                }



                //Recupera a lista de registros segundo a pesquisa
                this.grvResultadoRec.DataSource = this.SgiDAOT.getTitrecs(idTitRec, nrDoc, idFilial, idCtaCor, idCaixa, idCliente, idFormaPgto, idPlnCta, idCCusto, situacao, nrDocOri, idBanco, vctoDe, vctoAte, pgtoDe, pgtoAte, valorDe, valorAte);

                //Vincula os dados
                this.grvResultadoRec.DataBind();
            }
            catch (Exception ex)
            {

                throw ex;
            }
        }

        /// <summary>
        /// Manipula o evento do botão btnCancelar
        /// </summary>
        /// <param name="sender">Objeto disparador do evento</param>
        /// <param name="e">Argumento do evento</param>
        protected void btnCancelarRec_Click(object sender, EventArgs e)
        {
            //Volta para a tab page de pesquisa
            //this.tabTitrec.ActiveTabIndex = 0;

            // Desabilita os campos para edição
            Util.HabilitarCampos(false, this.panelCadRec);

            btnPesquisarClienteRec.Enabled = false;

            // Destrava botão de edição
            this.btnEditarRec.Enabled = (!string.IsNullOrEmpty(this.txtCadIdTitRec.Text));

            // Destrava botão de exclusao
            this.btnExcluirRec.Enabled = (!string.IsNullOrEmpty(this.txtCadIdTitRec.Text));

            // Detrava botão de novo
            this.btnNovoRec.Enabled = true;

            // Desabilita o botão salvar
            this.btnSalvarRec.Enabled = false;

        }

        protected void imgbVisualizarRec_Click(object sender, ImageClickEventArgs e)
        {
            // Declara objetos
            TitrecVO titrecVO = null;
            int idTitRec = 0;

            try
            {
                //Recupera os argumentos com o ID do objeto
                string[] argumentos = ((ImageButton)sender).CommandArgument.Split(';');
                idTitRec = Int32.Parse(argumentos[0]);

                //Recupera o objeto
                titrecVO = this.SgiDAOT.getTitrec(idTitRec);

                this.txtCadIdTitRec.Text = titrecVO.idTitRec.ToString();
                this.ddlCadIdFilialRec.SelectedValue = titrecVO.idFilial.ToString();
                if (titrecVO.idCtaCor == null)
                {
                    this.ddlCadIdBancoRec.SelectedValue = "-1";
                    atualizarDdlIdCtaCorRec(null, null);
                    this.ddlCadIdCtaCorRec.SelectedValue = "-1";
                }
                else
                {
                    this.ddlCadIdBancoRec.SelectedValue = Convert.ToString(this.SgiDAOT.getCtacor(titrecVO.idCtaCor).idBanco);
                    atualizarDdlIdCtaCorRec(null, null);
                    this.ddlCadIdCtaCorRec.SelectedValue = titrecVO.idCtaCor.Value.ToString();
                }
                if (titrecVO.idCaixa == null)
                    this.ddlCadIdCaixaRec.SelectedValue = "-1";
                else
                    this.ddlCadIdCaixaRec.SelectedValue = titrecVO.idCaixa.Value.ToString();
                if (titrecVO.idCliente == null)
                {
                    this.txtCadPesquisarClienteRec.Text = String.Empty;
                    atualizarddlCadIdClienteRec(null, null);
                    this.ddlCadIdClienteRec.SelectedValue = "-1";
                }
                else
                {
                    this.txtCadPesquisarClienteRec.Text = this.SgiDAOT.getCliente(titrecVO.idCliente).pessoa;
                    atualizarddlCadIdClienteRec(null, null);
                    this.ddlCadIdClienteRec.SelectedValue = Convert.ToString(titrecVO.idCliente);
                }
                if (titrecVO.idFormaPgto == null)
                    this.ddlCadIdFormaPgtoRec.SelectedValue = "-1";
                else
                    this.ddlCadIdFormaPgtoRec.SelectedValue = titrecVO.idFormaPgto.Value.ToString();
                if (titrecVO.idPlnCta == null)
                    this.ddlCadIdPlnCtaRec.SelectedValue = "-1";
                else
                    this.ddlCadIdPlnCtaRec.SelectedValue = titrecVO.idPlnCta.Value.ToString();
                if (titrecVO.idCLucro == null)
                    this.ddlCadIdCLucroRec.SelectedValue = "-1";
                else
                    this.ddlCadIdCLucroRec.SelectedValue = titrecVO.idCLucro.Value.ToString();
                this.txtCadNrDocRec.Text = titrecVO.nrDoc;
                this.txtCadObsRec.Text = titrecVO.obs;
                this.txtCadVctoRec.Text = titrecVO.vcto.ToString("dd/MM/yyyy");
                if (titrecVO.pgto == null)
                    this.txtCadPgtoRec.Text = null;
                else
                    this.txtCadPgtoRec.Text = titrecVO.pgto.Value.ToString("dd/MM/yyyy");
                this.txtCadValorRec.Text = String.Format("{0:n2}", titrecVO.valor);
                if (titrecVO.valorJuroC == null)
                    this.txtCadValorRecJuroC.Text = null;
                else
                    this.txtCadValorRecJuroC.Text = String.Format("{0:n2}", titrecVO.valorJuroC.Value);
                if (titrecVO.valorDescC == null)
                    this.txtCadValorRecDescC.Text = null;
                else
                    this.txtCadValorRecDescC.Text = String.Format("{0:n2}", titrecVO.valorDescC.Value);
                if (titrecVO.valorRec == null)
                    this.txtCadValorPagoRec.Text = null;
                else
                    this.txtCadValorPagoRec.Text = String.Format("{0:n2}", titrecVO.valorRec.Value);
                if (titrecVO.valorSaldo == null)
                    this.txtCadValorRecSaldo.Text = null;
                else
                    this.txtCadValorRecSaldo.Text = String.Format("{0:n2}", titrecVO.valorSaldo.Value);
                this.ddlCadSituacaoRec.SelectedValue = titrecVO.situacao.ToString();
                this.txtCadNrDocRecOri.Text = titrecVO.nrDocOri;
                this.ltCadastradoPorRec.Text = titrecVO.cadastradoPor;
                this.ltEditadoPorRec.Text = titrecVO.editadoPor;
                this.ltDataCadastroRec.Text = titrecVO.cadastro.ToString("dd/MM/yyyy");
                this.ltDataEdicaoRec.Text = titrecVO.edicao.ToString("dd/MM/yyyy");

                //Habilita tab page do cadastro
                this.tabTitrec.ActiveTabIndex = 1;

                //Desabilita campos para edição
                Util.HabilitarCampos(false, this.panelCadRec);

                btnPesquisarClienteRec.Enabled = false;

                //Desabilita botão salvar
                this.btnSalvarRec.Enabled = false;

                //Habilita botão editar
                this.btnEditarRec.Enabled = true;

                //Habilita botão excluir
                this.btnExcluirRec.Enabled = true;

                //Habilita botão novo
                this.btnNovoRec.Enabled = true;


                //habilita botoes pagamento
                this.btnRecNovo.Enabled = true;
                this.btnRecCancelar.Enabled = true;
                this.btnRecSalvar.Enabled = false;

                carregaTitrechist(titrecVO.idTitRec);
                carregaRecebimento(titrecVO.idTitRec);

            }
            catch (Exception ex)
            {

                throw ex;
            }
        }


        // <summary>
        // Manipula o evento editar do web form
        // </summary>
        // <param name="sender">Objeto disparador de evento</param>
        // <param name="e">Argumento do evento</param>
        protected void btnEditarRec_Click(object sender, EventArgs e)
        {
            // Habilita os campos para edição
            Util.HabilitarCampos(true, this.panelCadRec);

            btnPesquisarClienteRec.Enabled = true;

            // Trava apenas os text box da PK
            this.txtCadIdTitRec.Enabled = false;

            // Trava botão de edição
            this.btnEditarRec.Enabled = false;

            // Trava botão de exclusao
            this.btnExcluirRec.Enabled = false;

            // Trava botão de novo
            this.btnNovoRec.Enabled = false;

            // Habilita o botão salvar
            this.btnSalvarRec.Enabled = true;

            this.txtCadNrDocRec.Focus();
        }

        protected void btnNovoRec_Click(object sender, EventArgs e)
        {
            //Limpa formulario, para a entrada de novo registro
            Util.LimparCampos(this.panelCadRec);
            // Habilita os campos para edição
            Util.HabilitarCampos(true, this.panelCadRec);

            filtraFilialDDLRec(null, null);

            this.txtCadValorRecJuroC.Text = "0,00";
            this.txtCadValorRecDescC.Text = "0,00";
            this.txtCadValorPagoRec.Text = "0,00";
            this.txtCadValorRecSaldo.Text = "0,00";

            this.ltCadastradoPorRec.Text = "";
            this.ltEditadoPorRec.Text = "";
            this.ltDataCadastroRec.Text = "";
            this.ltDataEdicaoRec.Text = "";

            // Trava apenas os text box da PK
            this.txtCadIdTitRec.Enabled = false;

            btnPesquisarClienteRec.Enabled = true;

            // Trava botão de edição
            this.btnEditarRec.Enabled = false;

            // Trava botão de exclusao
            this.btnExcluirRec.Enabled = false;

            // Trava botão de novo
            this.btnNovoRec.Enabled = false;

            // Habilita o botão salvar
            this.btnSalvarRec.Enabled = true;

            this.txtCadNrDocRec.Focus();

        }

        protected void btnExcluirRec_Click(object sender, EventArgs e)
        {
            //Declara objetos
            TitrecVO titrecVO = null;
            TitrechistVO titrechistVO = null;

            try
            {
                //Cria objeto
                titrecVO = TitrecVO.CreateVO();
                titrecVO.idTitRec = Int32.Parse(this.txtCadIdTitRec.Text);

                titrechistVO = TitrechistVO.CreateVO();
                titrechistVO.idTitRecHist = -1;
                titrechistVO.idTitRec = titrecVO.idTitRec;

                this.SgiDAOT.transactionBegin();

                this.SgiDAOT.delTitrechist(titrechistVO);
                this.SgiDAOT.delTitrec(titrecVO);

                this.SgiDAOT.transactionCommit();

                verificaRecParcelamentoAlteracao(titrecVO.idTitRec, 'F', 0, -1);

                // Exibe msg de sucesso ao salvar registro
                Util.ExibeAlert(this, "Registro excluido com sucesso!");

                //Popula grid atualizado
                this.btnPesquisaRec_Click(null, null);

                //Limpa formulario, apos salvar os dados
                Util.LimparCampos(this.panelCadRec);
                this.ltCadastradoPorRec.Text = "";
                this.ltEditadoPorRec.Text = "";
                this.ltDataCadastroRec.Text = "";
                this.ltDataEdicaoRec.Text = "";

                btnPesquisarClienteRec.Enabled = false;

                // Trava botão de edição
                this.btnEditarRec.Enabled = false;

                // Trava botão de exclusao
                this.btnExcluirRec.Enabled = false;

                // Desabilita o botão salvar
                this.btnSalvarRec.Enabled = false;

                // Habilita o botao novo
                this.btnNovoRec.Enabled = true;

            }
            catch (Exception ex)
            {
                if (this.SgiDAOT != null)
                    this.SgiDAOT.transactionRollBack();
                Util.ExibeAlert(this, "Registro NÃO salvo! Erro: " + ex.Message);
            }

        }

        protected void filtraFilialDDLRec(object sender, EventArgs e)
        {
            atualizarDdlIdBancoRec(null, null);
            atualizarDdlIdCtaCorRec(null, null);
            atualizarddlIdCaixaRec(null, null);
            atualizarddlCadIdClienteRec(null, null);
            atualizarddlIdFormaPgtoRec(null, null);
            atualizarddlIdPlnCtaRec(null, null);
            atualizarddlIdCLucroRec(null, null);
        }

        protected void ddlBancoRec_SelectedIndexChanged(object sender, EventArgs e)
        {
            atualizarDdlIdCtaCorRec(null, null);
        }

        protected void btnPesquisarClienteRec_Click(object sender, EventArgs e)
        {
            if (!String.IsNullOrEmpty(txtCadPesquisarClienteRec.Text) && !ddlCadIdFilialRec.SelectedValue.Equals("-1"))
                atualizarddlCadIdClienteRec(null, null);
            else
                Util.ExibeAlert(this, "Informe a pessoa e a filial para a pesquisa!");
        }

        protected void grvResultadoRec_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                int idTitRec = int.Parse(((HiddenField)e.Row.FindControl("hfIdTitRec")).Value);

                TitrecVO trVO = (TitrecVO)e.Row.DataItem;

                Label lblSituacaoRec = (Label)e.Row.FindControl("lblSituacaoRec");
                ImageButton imgbParcelamentoRec = (ImageButton)e.Row.FindControl("imgbParcelamentoRec");

                lblSituacaoRec.Text = trVO.situacao == 'A' ? "Aberto" : trVO.situacao == 'F' ? "Fechado" : "Cancelado";
                imgbParcelamentoRec.Visible = trVO.situacao == 'A' && trVO.valorSaldo > 0 ? true : false;
            }
        }



        #region TitrecXTitrechist

        protected void carregaTitrechist(int id)
        {
            //recupera Titpaghist
            Util.LimparCampos(this.panelTitrechist);
            Util.HabilitarCampos(true, this.panelTitrechist);
            this.ltCadTitrechistTitrec.Text = Convert.ToString(id);
            this.ltTitrechistCadastradoPor.Text = "";
            this.ltTitrechistDataCadastro.Text = "";
            this.ltTitrechistDataEdicao.Text = "";
            this.ltTitrechistEditadoPor.Text = "";
            this.grvCadTitrecxTitrechist.DataSource = this.SgiDAOT.getTitrechists(null, null, id);
            this.grvCadTitrecxTitrechist.DataBind();
        }

        protected void imgbCadTitrechistVisualizar_Click(object sender, ImageClickEventArgs e)
        {
            // Declara objetos
            TitrechistVO titrechistVO = null;
            int idTitRecHist = 0;

            try
            {
                //Recupera os argumentos com o ID do objeto
                string[] argumentos = ((ImageButton)sender).CommandArgument.Split(';');
                idTitRecHist = Int32.Parse(argumentos[0]);

                //Recupera o objeto
                titrechistVO = this.SgiDAOT.getTitrechist(idTitRecHist);

                this.txtCadTitrechistIdTitRecHist.Text = titrechistVO.idTitRecHist.ToString();
                this.txtCadTitrechistTitRecHist.Text = titrechistVO.titRecHist;
                this.txtCadTitrechistTitRecAcao.Text = titrechistVO.titRecAcao;
                this.ltTitrechistCadastradoPor.Text = titrechistVO.cadastradoPor;
                this.ltTitrechistEditadoPor.Text = titrechistVO.editadoPor;
                this.ltTitrechistDataCadastro.Text = titrechistVO.cadastro.ToString("dd/MM/yyyy");
                this.ltTitrechistDataEdicao.Text = titrechistVO.edicao.ToString("dd/MM/yyyy");

            }
            catch (Exception ex)
            {

                throw ex;
            }
        }

        protected TitrechistVO logTitrec(TitrecVO original, TitrecVO alteracao)
        {
            string acao = String.Empty;
            StringBuilder para = new StringBuilder();
            StringBuilder paraCompara = new StringBuilder();
            int idTitrec = alteracao.idTitRec;

            if (original == null)
            {
                acao = "Inclusão";
                para.Append("ID => " + alteracao.idTitRec);
                para.Append(", ID Filial => " + alteracao.idFilial);
                para.Append((alteracao.idCtaCor != (int)-1 && alteracao.idCtaCor != null ? ", ID Conta Corrente => " + alteracao.idCtaCor : ""));
                para.Append((alteracao.idCaixa != (int)-1 && alteracao.idCaixa != null ? ", ID Caixa => " + alteracao.idCaixa : ""));
                para.Append((alteracao.idCliente != (int)-1 && alteracao.idCliente != null ? ", ID Cliente => " + alteracao.idCliente : ""));
                para.Append((alteracao.idFormaPgto != (int)-1 && alteracao.idFormaPgto != null ? ", ID Forma de Pagamento => " + alteracao.idFormaPgto : ""));
                para.Append((alteracao.idPlnCta != (int)-1 && alteracao.idPlnCta != null ? ", ID Plano de Conta => " + alteracao.idPlnCta : ""));
                para.Append((alteracao.idCLucro != (int)-1 && alteracao.idCLucro != null ? ", ID Centro de Custo => " + alteracao.idCLucro : ""));

                para.Append((!String.IsNullOrEmpty(alteracao.nrDoc) ? ", Documento => " + alteracao.nrDoc : ""));
                para.Append((!String.IsNullOrEmpty(alteracao.nrDocOri) ? ", Documento Originario => " + alteracao.nrDoc : ""));
                para.Append((!String.IsNullOrEmpty(alteracao.obs) ? ", Obs => " + alteracao.obs : ""));
                para.Append((!String.IsNullOrEmpty(alteracao.vcto.ToString("dd/MM/yyyy")) ? ", Data Vencimento => " + alteracao.vcto.ToString("dd/MM/yyyy") : ""));
                para.Append((alteracao.pgto != null) ? ", Data Pagamento => " + alteracao.pgto.Value.ToString("dd/MM/yyyy") : "");

                para.Append(", Valor Título => " + alteracao.valor);
                para.Append(alteracao.valorJuroC != null ? ", Valor de Acrescimo => " + alteracao.valorJuroC.Value.ToString() : "");
                para.Append(alteracao.valorDescC != null ? ", Valor de desconto => " + alteracao.valorDescC.Value.ToString() : "");
                para.Append(alteracao.valorRec != null ? ", Valor Pago => " + alteracao.valorRec.Value.ToString() : "");
                para.Append(alteracao.valorSaldo != null ? ", Valor Saldo => " + alteracao.valorSaldo.Value.ToString() : "");

                para.Append((alteracao.situacao == 'A' ? ", Situação => Aberto" : alteracao.situacao == 'F' ? ", Situação => Fechado" : ", Situação => Cancelado"));
            }
            else if (original != null && alteracao != null)
            {
                if (!original.Equals(alteracao))
                {
                    acao = "Alteração";
                    para.Append("ID => " + alteracao.idTitRec);
                    paraCompara.Append(para.ToString());
                    if (!original.idFilial.Equals(alteracao.idFilial))
                        para.Append(", ID Filial => " + alteracao.idFilial);
                    if (!original.idCtaCor.Equals(alteracao.idCtaCor))
                        para.Append(", ID Conta Corrente => " + (original.idCtaCor != (int)-1 && original.idCtaCor != null ? Convert.ToString(alteracao.idCtaCor) : "\"Vazio\"") + " para " + (alteracao.idCtaCor != (int)-1 && alteracao.idCtaCor != null ? Convert.ToString(alteracao.idCtaCor) : "\"Vazio\""));
                    if (!original.idCaixa.Equals(alteracao.idCaixa))
                        para.Append(", ID Caixa=> " + (original.idCaixa != (int)-1 && original.idCaixa != null ? Convert.ToString(alteracao.idCaixa) : "\"Vazio\"") + " para " + (alteracao.idCaixa != (int)-1 && alteracao.idCaixa != null ? Convert.ToString(alteracao.idCaixa) : "\"Vazio\""));
                    if (!original.idCliente.Equals(alteracao.idCliente))
                        para.Append(", ID Cliente=> " + (original.idCliente != (int)-1 && original.idCliente != null ? Convert.ToString(alteracao.idCliente) : "\"Vazio\"") + " para " + (alteracao.idCliente != (int)-1 && alteracao.idCliente != null ? Convert.ToString(alteracao.idCliente) : "\"Vazio\""));
                    if (!original.idFormaPgto.Equals(alteracao.idFormaPgto))
                        para.Append(", ID Forma de Pagamento=> " + (original.idFormaPgto != (int)-1 && original.idFormaPgto != null ? Convert.ToString(alteracao.idFormaPgto) : "\"Vazio\"") + " para " + (alteracao.idFormaPgto != (int)-1 && alteracao.idFormaPgto != null ? Convert.ToString(alteracao.idFormaPgto) : "\"Vazio\""));
                    if (!original.idPlnCta.Equals(alteracao.idPlnCta))
                        para.Append(", ID Plano de Conta=> " + (original.idPlnCta != (int)-1 && original.idPlnCta != null ? Convert.ToString(alteracao.idPlnCta) : "\"Vazio\"") + " para " + (alteracao.idPlnCta != (int)-1 && alteracao.idPlnCta != null ? Convert.ToString(alteracao.idPlnCta) : "\"Vazio\""));
                    if (!original.idCLucro.Equals(alteracao.idCLucro))
                        para.Append(", ID Centro de Custo=> " + (original.idCLucro != (int)-1 && original.idCLucro != null ? Convert.ToString(alteracao.idCLucro) : "\"Vazio\"") + " para " + (alteracao.idCLucro != (int)-1 && alteracao.idCLucro != null ? Convert.ToString(alteracao.idCLucro) : "\"Vazio\""));

                    original.nrDoc = (String.IsNullOrEmpty(original.nrDoc) ? "" : original.nrDoc);
                    alteracao.nrDoc = (String.IsNullOrEmpty(alteracao.nrDoc) ? "" : alteracao.nrDoc);
                    if (!original.nrDoc.Equals(alteracao.nrDoc))
                        para.Append(", Documento => " + (!String.IsNullOrEmpty(original.nrDoc) ? original.nrDoc : "\"Vazio\"") + " para " + (!String.IsNullOrEmpty(alteracao.nrDoc) ? alteracao.nrDoc : "\"Vazio\""));

                    original.nrDocOri = (String.IsNullOrEmpty(original.nrDocOri) ? "" : original.nrDocOri);
                    alteracao.nrDocOri = (String.IsNullOrEmpty(alteracao.nrDocOri) ? "" : alteracao.nrDocOri);
                    if (!original.nrDocOri.Equals(alteracao.nrDocOri))
                        para.Append(", Documento Originario => " + (!String.IsNullOrEmpty(original.nrDocOri) ? original.nrDoc : "\"Vazio\"") + " para " + (!String.IsNullOrEmpty(alteracao.nrDocOri) ? alteracao.nrDoc : "\"Vazio\""));

                    original.obs = (String.IsNullOrEmpty(original.obs) ? "" : original.obs);
                    alteracao.obs = (String.IsNullOrEmpty(alteracao.obs) ? "" : alteracao.obs);
                    if (!original.obs.Equals(alteracao.obs))
                        para.Append(", Obs => " + (!String.IsNullOrEmpty(original.obs) ? original.obs : "\"Vazio\"") + " para " + (!String.IsNullOrEmpty(alteracao.obs) ? alteracao.obs : "\"Vazio\""));

                    if (!original.vcto.Equals(alteracao.vcto))
                        para.Append(", Data Vencimento => " + (!String.IsNullOrEmpty(original.vcto.ToString("dd/MM/yyyy")) ? original.vcto.ToString("dd/MM/yyyy") : "\"Vazio\"") + " para " + (!String.IsNullOrEmpty(alteracao.vcto.ToString("dd/MM/yyyy")) ? alteracao.vcto.ToString("dd/MM/yyyy") : "\"Vazio\""));

                    if (!original.pgto.Equals(alteracao.pgto))
                        para.Append(", Data Pagamento => " + ((original.pgto != null) ? original.pgto.Value.ToString("dd/MM/yyyy") : "\"Vazio\"") + " para " + ((alteracao.pgto != null) ? alteracao.pgto.Value.ToString("dd/MM/yyyy") : "\"Vazio\""));

                    if (!original.valor.Equals(alteracao.valor))
                        para.Append(", Valor Título => " + original.valor + " para " + alteracao.valor);
                    if (!original.valorJuroC.Equals(alteracao.valorJuroC))
                        para.Append(", Valor de Acrescimo => " + (original.valorJuroC != null ? original.valorJuroC.Value.ToString() : "\"Vazio\"") + " para " + (alteracao.valorJuroC != null ? alteracao.valorJuroC.Value.ToString() : "\"Vazio\""));
                    if (!original.valorDescC.Equals(alteracao.valorDescC))
                        para.Append(", Valor de desconto => " + (original.valorDescC != null ? original.valorDescC.Value.ToString() : "\"Vazio\"") + " para " + (alteracao.valorDescC != null ? alteracao.valorDescC.Value.ToString() : "\"Vazio\""));
                    if (!original.valorRec.Equals(alteracao.valorRec))
                        para.Append(", Valor Pago => " + (original.valorRec != null ? original.valorRec.Value.ToString() : "\"Vazio\"") + " para " + (alteracao.valorRec != null ? alteracao.valorRec.Value.ToString() : "\"Vazio\""));
                    if (!original.valorSaldo.Equals(alteracao.valorSaldo))
                        para.Append(", Valor Saldo => " + (original.valorSaldo != null ? original.valorSaldo.Value.ToString() : "\"Vazio\"") + " para " + (alteracao.valorSaldo != null ? alteracao.valorSaldo.Value.ToString() : "\"Vazio\""));

                    if (!original.situacao.Equals(alteracao.situacao))
                        para.Append(", Situação => " + (original.situacao == 'A' ? "Aberto" : original.situacao == 'F' ? "Fechado" : "Cancelado") + " para " + (alteracao.situacao == 'A' ? "Aberto" : alteracao.situacao == 'F' ? "Fechado" : "Cancelado"));
                }
            }

            TitrechistVO trhVO = null;

            if (para.Length > paraCompara.Length)
            {
                trhVO = TitrechistVO.CreateVO();

                trhVO.titRecAcao = acao;
                trhVO.titRecHist = para.ToString();
                trhVO.idTitRec = (int)alteracao.idTitRec;

                trhVO.cadastradoPor = usuarioVO.user;
                trhVO.cadastro = DateTime.Now;
                trhVO.editadoPor = usuarioVO.user;
                trhVO.edicao = DateTime.Now;
            }
            return trhVO;

        }

        #endregion

        #region TitipagXPagamento

        protected void carregaRecebimento(int id)
        {
            TitrecVO trVO = this.SgiDAOT.getTitrec(id);

            //recupera Titpaghist
            Util.LimparCampos(this.pnlRecebimentoRec);
            this.ltRecIDTitrec.Text = Convert.ToString(trVO.idTitRec);
            this.lblRecValor.Text = Convert.ToString(trVO.valor);
            this.lblRecAcrescimo.Text = Convert.ToString(trVO.valorJuroC);
            this.lblRecDesconto.Text = Convert.ToString(trVO.valorDescC);
            this.lblRecPago.Text = Convert.ToString(trVO.valorRec);
            this.lblRecSaldo.Text = Convert.ToString(trVO.valorSaldo);
            this.ltRecCadastradoPor.Text = "";
            this.ltRecDataCadastro.Text = "";
            this.ltRecDataEdicao.Text = "";
            this.ltRecEditadoPor.Text = "";
            this.gvRecebimentoRec.DataSource = this.SgiDAOT.getMvtofins(null, null, null, null, null, null, null, null, null, null, id, null, null, null, null);
            this.gvRecebimentoRec.DataBind();
        }

        protected void btnRecSalvar_Click(object sender, EventArgs e)
        {

            //Declara objetos
            MvtofinVO mvtofinVO = null;
            bool novoRegistro = false;

            try
            {
                //Verifica se o ID é nulo, se sim = cadastro novo
                if (string.IsNullOrEmpty(this.txtRecCodigo.Text))
                {
                    mvtofinVO = MvtofinVO.CreateVO();
                    mvtofinVO.cadastro = DateTime.Now;
                    mvtofinVO.cadastradoPor = usuarioVO.user;

                    novoRegistro = true;

                }
                //Recupera dados para serem alterados
                else
                {
                    //Recupera dados
                    mvtofinVO = this.SgiDAOT.getMvtofin(Int32.Parse(this.txtRecCodigo.Text));
                }

                mvtofinVO.idFilial = Int32.Parse(this.ddlRecFilial.SelectedValue);
                if (this.ddlRecContaCorrente.SelectedValue.Equals("-1"))
                    mvtofinVO.idCtaCor = null;
                else
                    mvtofinVO.idCtaCor = Int32.Parse(this.ddlRecContaCorrente.SelectedValue);
                if (this.ddlRecCaixa.SelectedValue.Equals("-1"))
                    mvtofinVO.idCaixa = null;
                else
                    mvtofinVO.idCaixa = Int32.Parse(this.ddlRecCaixa.SelectedValue);
                TitrecVO titrecVO = this.SgiDAOT.getTitrec(Convert.ToInt32(txtCadIdTitRec.Text));
                if (titrecVO == null && titrecVO.idCliente == null && titrecVO.idCliente.Equals("-1"))
                    mvtofinVO.idCliente = null;
                else
                    titrecVO.idCliente = titrecVO.idCliente;
                if (this.ddlRecFormaPagamento.SelectedValue.Equals("-1"))
                    mvtofinVO.idFormaPgto = null;
                else
                    mvtofinVO.idFormaPgto = Int32.Parse(this.ddlRecFormaPagamento.SelectedValue);
                if (titrecVO == null || titrecVO.idPlnCta == null || titrecVO.idPlnCta.Equals("-1"))
                    mvtofinVO.idPlnCta = null;
                else
                    mvtofinVO.idPlnCta = titrecVO.idPlnCta;
                if (titrecVO == null || titrecVO.idCLucro == null || titrecVO.idCLucro.Equals("-1"))
                    mvtofinVO.idCLucro = null;
                else
                    mvtofinVO.idCLucro = titrecVO.idCLucro;

                mvtofinVO.idTitRec = Int32.Parse(this.txtCadIdTitRec.Text);

                mvtofinVO.dtMvtoFin = DateTime.Parse(this.txtRecDataPagamento.Text);

                mvtofinVO.natureza = 'C';

                mvtofinVO.valor = decimal.Parse(this.txtRecValor.Text.Replace(".", ""));
                mvtofinVO.valorJuro = decimal.Parse(this.txtRecValorJuros.Text.Replace(".", ""));
                mvtofinVO.valorDesc = decimal.Parse(this.txtRecValorDescC.Text.Replace(".", ""));
                mvtofinVO.valorPago = decimal.Parse(this.txtRecValorPago.Text.Replace(".", ""));

                mvtofinVO.edicao = DateTime.Now;
                mvtofinVO.editadoPor = usuarioVO.user;

                this.SgiDAOT.transactionBegin();

                titrecVO.valorJuroC += mvtofinVO.valorJuro;
                titrecVO.valorDescC += mvtofinVO.valorDesc;
                titrecVO.valorRec += mvtofinVO.valorPago;

                decimal resultado = (decimal)((titrecVO.valor + titrecVO.valorJuroC) - (titrecVO.valorRec + titrecVO.valorDescC));

                if (resultado >= 0)
                {

                    DateTime dtAtualizadaRec = Convert.ToDateTime(this.txtRecDataPagamento.Text);
                    if (!String.IsNullOrEmpty(this.txtCadPgtoRec.Text))
                    {
                        DateTime dtUltimoRec = Convert.ToDateTime(this.txtCadPgtoRec.Text);
                        if (dtUltimoRec > dtAtualizadaRec)
                            titrecVO.pgto = dtUltimoRec;
                        else
                            titrecVO.pgto = dtAtualizadaRec;
                    }
                    else
                    {
                        titrecVO.pgto = dtAtualizadaRec;
                    }

                    this.txtCadPgtoRec.Text = titrecVO.pgto.Value.ToString("dd/MM/yyyy");

                    if (!cbRecSituacao.Checked)
                    {
                        titrecVO.situacao = 'A';
                        titrecVO.valorSaldo = resultado;
                        txtCadValorRecSaldo.Text = Convert.ToString(titrecVO.valorSaldo);
                    }
                    else
                    {
                        titrecVO.situacao = 'F';
                        titrecVO.valorDescC += resultado;
                        titrecVO.valorSaldo = 0;
                        txtCadValorRecDescC.Text = Convert.ToString(titrecVO.valorDescC);
                        txtCadValorRecSaldo.Text = "0,00";
                    }

                }
                else
                {
                    Util.ExibeAlert(this, "O valor do saldo não pode ser menor que zero! Altere os valores!");
                    if (this.SgiDAOT != null)
                        this.SgiDAOT.transactionRollBack();
                    return;
                }



                //Chama metodo para salvar ou criar novo registro
                if (novoRegistro)
                    mvtofinVO.idMvtoFin = (int)this.SgiDAOT.newMvtofin(mvtofinVO);
                else
                    this.SgiDAOT.setMvtofin(mvtofinVO);

                this.SgiDAOT.newTitrechist(logMvtofinRec(mvtofinVO));

                this.SgiDAOT.setTitrec(titrecVO);

                this.SgiDAOT.transactionCommit();

                atualizaGvParcelamentoRec(titrecVO.idTitRec, (Decimal)titrecVO.valorSaldo);

                // Exibe msg de sucesso ao salvar registro
                Util.ExibeAlert(this, "Registro salvo com sucesso!");

                //Popula grid atualizado
                this.btnPesquisaRec_Click(null, null);

                //Atualiza formulario, apos salvar os dados
                this.txtRecCodigo.Text = mvtofinVO.idMvtoFin.ToString();
                this.ltRecCadastradoPor.Text = mvtofinVO.cadastradoPor;
                this.ltRecEditadoPor.Text = mvtofinVO.editadoPor;
                this.ltRecDataCadastro.Text = mvtofinVO.cadastro.ToString("dd/MM/yyyy");
                this.ltRecDataEdicao.Text = mvtofinVO.edicao.ToString("dd/MM/yyyy");

                this.gvRecebimentoRec.DataSource = this.SgiDAOT.getMvtofins(null, null, null, null, null, null, null, null, null, null, mvtofinVO.idTitRec, null, null, null, null);
                this.gvRecebimentoRec.DataBind();

                ImageButton i = new ImageButton();
                i.CommandArgument = Convert.ToString(titrecVO.idTitRec);

                imgbVisualizarRec_Click(i, null);

                this.tabTitrec.ActiveTabIndex = 2;

                i.CommandArgument = Convert.ToString(mvtofinVO.idMvtoFin);

                imgbRecVisualizar_Click(i, null);
                btnRecCancelar_Click(null, null);
            }
            catch (Exception ex)
            {
                if (this.SgiDAOT != null)
                    this.SgiDAOT.transactionRollBack();
                Util.ExibeAlert(this, "Registro NÃO salvo! Erro: " + ex.Message);
            }
        }

        protected void btnRecCancelar_Click(object sender, EventArgs e)
        {
            //Volta para a tab page de pesquisa
            //this.tabTitrec.ActiveTabIndex = 0;

            // Desabilita os campos para edição
            Util.HabilitarCampos(false, this.pnlRecebimentoRec);


            // Detrava botão de novo
            this.btnRecNovo.Enabled = true;

            // Desabilita o botão salvar
            this.btnRecSalvar.Enabled = false;

        }

        protected void btnRecNovo_Click(object sender, EventArgs e)
        {
            //Limpa formulario, para a entrada de novo registro
            Util.LimparCampos(this.pnlRecebimentoRec);
            // Habilita os campos para edição
            Util.HabilitarCampos(true, this.pnlRecebimentoRec);

            this.txtRecValor.Text = txtCadValorRec.Text;
            this.txtRecValorJuros.Text = "0,00";
            this.txtRecValorDescC.Text = "0,00";
            this.txtRecValorPago.Text = "0,00";

            this.ltRecCadastradoPor.Text = "";
            this.ltRecEditadoPor.Text = "";
            this.ltRecDataCadastro.Text = "";
            this.ltRecDataEdicao.Text = "";

            // Trava apenas os text box da PK
            this.txtRecCodigo.Enabled = false;

            // Trava botão de novo
            this.btnRecNovo.Enabled = false;

            // Habilita o botão salvar
            this.btnRecSalvar.Enabled = true;

            this.txtRecDataPagamento.Focus();

            TitrecVO trVO = this.SgiDAOT.getTitrec(Convert.ToInt32(txtCadIdTitRec.Text));

            if (trVO.idCtaCor != null && trVO.idCtaCor != -1)
            {
                ddlRecBanco.SelectedValue = Convert.ToString(this.SgiDAOT.getCtacor(trVO.idCtaCor).idBanco);
                ddlBancoRec_SelectedIndexChanged(null, null);
                ddlRecContaCorrente.SelectedValue = Convert.ToString(trVO.idCtaCor);
            }

            if (trVO.idCaixa != null && trVO.idCaixa != -1)
                ddlRecCaixa.SelectedValue = Convert.ToString(trVO.idCaixa);

            if (trVO.idFormaPgto != null && trVO.idFormaPgto != -1)
                ddlRecFormaPagamento.SelectedValue = Convert.ToString(trVO.idFormaPgto);

            if (trVO.situacao == 'F')
                cbRecSituacao.Checked = true;
            else
                cbRecSituacao.Checked = false;

        }

        protected void imgbRecVisualizar_Click(object sender, ImageClickEventArgs e)
        {
            // Declara objetos
            MvtofinVO mvtofinVO = null;
            int idPagamento = 0;

            try
            {
                //Recupera os argumentos com o ID do objeto
                string[] argumentos = ((ImageButton)sender).CommandArgument.Split(';');
                idPagamento = Int32.Parse(argumentos[0]);

                //Recupera o objeto
                mvtofinVO = this.SgiDAOT.getMvtofin(idPagamento);

                this.txtRecCodigo.Text = mvtofinVO.idMvtoFin.ToString();
                this.ddlRecFilial.SelectedValue = Convert.ToString(mvtofinVO.idFilial);
                filtraFilialDDLRec(null, null);
                if (mvtofinVO.idCtaCor == null)
                {
                    this.ddlRecBanco.SelectedValue = "-1";
                    atualizarDdlIdCtaCorRec(null, null);
                    this.ddlRecContaCorrente.SelectedValue = "-1";
                }
                else
                {
                    this.ddlRecBanco.SelectedValue = Convert.ToString(this.SgiDAOT.getCtacor(mvtofinVO.idCtaCor).idBanco);
                    atualizarDdlIdCtaCorRec(null, null);
                    this.ddlRecContaCorrente.SelectedValue = mvtofinVO.idCtaCor.Value.ToString();
                }
                if (mvtofinVO.idCaixa == null)
                    this.ddlRecCaixa.SelectedValue = "-1";
                else
                    this.ddlRecCaixa.SelectedValue = mvtofinVO.idCaixa.Value.ToString();
                if (mvtofinVO.idFormaPgto == null)
                    this.ddlRecFormaPagamento.SelectedValue = "-1";
                else
                    this.ddlRecFormaPagamento.SelectedValue = mvtofinVO.idFormaPgto.Value.ToString();
                if (mvtofinVO.dtMvtoFin == null)
                    this.txtRecDataPagamento.Text = null;
                else
                    this.txtRecDataPagamento.Text = mvtofinVO.dtMvtoFin.ToString("dd/MM/yyyy");
                this.txtRecValor.Text = String.Format("{0:n2}", mvtofinVO.valor);
                if (mvtofinVO.valorJuro == null)
                    this.txtRecValorJuros.Text = null;
                else
                    this.txtRecValorJuros.Text = String.Format("{0:n2}", mvtofinVO.valorJuro.Value);
                if (mvtofinVO.valorDesc == null)
                    this.txtRecValorDescC.Text = null;
                else
                    this.txtRecValorDescC.Text = String.Format("{0:n2}", mvtofinVO.valorDesc.Value);
                if (mvtofinVO.valorPago == null)
                    this.txtRecValorPago.Text = null;
                else
                    this.txtRecValorPago.Text = String.Format("{0:n2}", mvtofinVO.valorPago.Value);

                this.ltRecCadastradoPor.Text = mvtofinVO.cadastradoPor;
                this.ltRecEditadoPor.Text = mvtofinVO.editadoPor;
                this.ltRecDataCadastro.Text = mvtofinVO.cadastro.ToString("dd/MM/yyyy");
                this.ltRecDataEdicao.Text = mvtofinVO.edicao.ToString("dd/MM/yyyy");

                //Desabilita campos para edição
                Util.HabilitarCampos(false, this.pnlRecebimentoRec);

                //Desabilita botão salvar
                this.btnRecSalvar.Enabled = false;

                //Habilita botão novo
                this.btnRecNovo.Enabled = true;

                if (ddlCadSituacaoRec.SelectedValue == "F")
                    cbRecSituacao.Checked = true;
                else
                    cbRecSituacao.Checked = false;
            }
            catch (Exception ex)
            {

                throw ex;
            }
        }

        #endregion

        #region PagamentoXTitirechist

        protected TitrechistVO logMvtofinRec(MvtofinVO alteracao)
        {
            string acao = String.Empty;
            StringBuilder para = new StringBuilder();
            int idTitpag = alteracao.idMvtoFin;

            acao = "Pagamento";
            para.Append("ID => " + alteracao.idMvtoFin);
            para.Append(", ID Titulo => " + alteracao.idTitRec);
            para.Append(", ID Filial => " + alteracao.idFilial);
            para.Append((alteracao.idCtaCor != (int)-1 && alteracao.idCtaCor != null ? ", ID Conta Corrente => " + alteracao.idCtaCor : ""));
            para.Append((alteracao.idCaixa != (int)-1 && alteracao.idCaixa != null ? ", ID Caixa => " + alteracao.idCaixa : ""));
            para.Append((alteracao.idCliente != (int)-1 && alteracao.idCliente != null ? ", ID Cliente => " + alteracao.idCliente : ""));
            para.Append((alteracao.idFormaPgto != (int)-1 && alteracao.idFormaPgto != null ? ", ID Forma de Pagamento => " + alteracao.idFormaPgto : ""));
            para.Append((alteracao.idPlnCta != (int)-1 && alteracao.idPlnCta != null ? ", ID Plano de Conta => " + alteracao.idPlnCta : ""));
            para.Append((alteracao.idCLucro != (int)-1 && alteracao.idCLucro != null ? ", ID Centro de Lucro => " + alteracao.idCLucro : ""));

            para.Append(", Data Pagamento => " + alteracao.dtMvtoFin);
            para.Append(", Valor Título => " + alteracao.valor);
            para.Append(alteracao.valorJuro != null ? ", Valor de Acrescimo => " + alteracao.valorJuro.Value.ToString() : "");
            para.Append(alteracao.valorDesc != null ? ", Valor de desconto => " + alteracao.valorDesc.Value.ToString() : "");
            para.Append(alteracao.valorPago != null ? ", Valor Pago => " + alteracao.valorPago.Value.ToString() : "");

            para.Append((!cbRecSituacao.Checked ? ", Situação => Aberto" : ", Situação => Fechado"));

            TitrechistVO trhVO = null;

            trhVO = TitrechistVO.CreateVO();

            trhVO.titRecAcao = acao;
            trhVO.titRecHist = para.ToString();
            trhVO.idTitRec = (int)alteracao.idTitRec;

            trhVO.cadastradoPor = usuarioVO.user;
            trhVO.cadastro = DateTime.Now;
            trhVO.editadoPor = usuarioVO.user;
            trhVO.edicao = DateTime.Now;

            return trhVO;

        }

        #endregion

        #region Parcelamento

        protected void imgbParcelamentoRec_Click(object sender, ImageClickEventArgs e)
        {
            string idTitpagCliente = ((ImageButton)sender).CommandArgument;
            string[] idS = idTitpagCliente.Split('|');

            int idTitrec = Convert.ToInt32(idS[0].ToString());
            int? idCliente = idS[1].ToString() != null && !String.IsNullOrEmpty(idS[1].ToString()) ? Convert.ToInt32(idS[1].ToString()) : 0;
            int idFilial = Convert.ToInt32(idS[2].ToString());
            List<TitrecVO> trVOLista;
            atualizaValorTotalRec();
            if (this.txtRecParcelaSaldo.Text == "0,00" || this.txtRecParcelaSaldo.Text == "0" || String.IsNullOrEmpty(this.txtRecParcelaSaldo.Text))
            {
                Session["parcelamentoReceber"] = null;
                carregaParcelamentoRec(null);
                Session["parcelamentoReceberParcela"] = null;
                carregaParcelasRec(null);
            }

            if (this.Session["parcelamentoReceber"] == null)
            {
                trVOLista = new List<TitrecVO>();
                trVOLista.Add(this.SgiDAOT.getTitrec(idTitrec));
                this.Session["parcelamentoReceber"] = trVOLista;

                if (idCliente != 0)
                {
                    ClienteVO clVO = this.SgiDAOT.getCliente((int)idCliente);
                    this.txtRecParcelaIdCliente.Text = clVO.pessoa;
                    this.hfRecParcelaIdCliente.Value = Convert.ToString(clVO.idCliente);
                }

                FilialVO flVO = this.SgiDAOT.getFilial(idFilial);
                this.txtRecParcelaIdFilial.Text = flVO.filial;
                this.hfRecParcelaIdFilial.Value = Convert.ToString(flVO.idFilial);

                gvRecParcelamento.Enabled = true;

                tabTitrec.ActiveTabIndex = 4;
            }
            else
            {
                trVOLista = (List<TitrecVO>)this.Session["parcelamentoReceber"];
                TitrecVO trVO = trVOLista.Find(trVOP => trVOP.idTitRec == idTitrec);
                if (trVO == null)
                {
                    if (trVOLista.Count > 0)
                    {
                        if (hfRecParcelaIdCliente.Value == (idCliente == 0 ? String.Empty : Convert.ToString(idCliente)))
                        {
                            trVOLista.Add(this.SgiDAOT.getTitrec(idTitrec));

                            gvRecParcelamento.Enabled = true;

                            tabTitrec.ActiveTabIndex = 4;
                        }
                        else
                        {
                            Util.ExibeAlert(this, "Titulo não tem o mesmo cliente para fazer o parcelamento!");
                        }
                    }
                    else
                    {
                        trVOLista.Add(this.SgiDAOT.getTitrec(idTitrec));

                        gvRecParcelamento.Enabled = true;

                        tabTitrec.ActiveTabIndex = 4;
                    }
                }
                else
                {
                    Util.ExibeAlert(this, "Titulo já esta no parcelamento!");
                }
            }
            carregaParcelamentoRec(trVOLista);


        }

        protected void gvRecParcelamento_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                int id = Convert.ToInt32(e.Row.Cells[0].Text.Replace(".", ""));

                TitrecVO trVO = (TitrecVO)e.Row.DataItem;

                e.Row.Cells[3].Text = String.Format("{0:c}", trVO.valorSaldo);

                this.saldoRecParcelamento += (decimal)trVO.valorSaldo;
                if (this.saldoRecParcelamento > 0)
                    txtRecParcelaSaldo.Text = Convert.ToString(this.saldoRecParcelamento);
                else
                    txtRecParcelaSaldo.Text = "0,00";

                if (!String.IsNullOrEmpty(docOriRec))
                    docOriRec += ",";
                docOriRec += e.Row.Cells[0].Text.Replace(".", "");

                txtRecParcelaDocOri.Text = docOriRec;
            }
        }

        protected void gvRecParcelamentoResultado_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                TitrecVO trVO = (TitrecVO)e.Row.DataItem;
                if (trVO.idTitRec == idRecParcelamentoParcelaIdTitrec)
                {
                    TitrecVO trVOU = this.SgiDAOT.getTitrec(idRecParcelamentoParcelaIdTitrec);

                    TextBox txtRecParcelamentoVencimento = (TextBox)e.Row.FindControl("txtRecParcelamentoVencimento");
                    txtRecParcelamentoVencimento.Text = trVOU.vcto.ToString("dd/MM/yyyy");

                    TextBox txtRecParcelamentoNrDoc = (TextBox)e.Row.FindControl("txtRecParcelamentoNrDoc");
                    txtRecParcelamentoNrDoc.Text = trVOU.nrDoc;

                    TextBox txtRecParcelamentoValor = (TextBox)e.Row.FindControl("txtRecParcelamentoValor");
                    txtRecParcelamentoValor.Text = Convert.ToString(trVOU.valor);

                    saldoRecParcelamento += trVOU.valor;
                }
                else
                {
                    saldoRecParcelamento += trVO.valor;
                }
                atualizaValorTotalRec();
            }
        }

        protected void verificaRecParcelamentoAlteracao(int idTitrec, char situacao, Decimal saldo, int? idCliente)
        {
            if (gvRecParcelamento.Rows.Count > 0)
            {
                if (gvRecParcelamento.Rows.Count == 1)
                {
                    if (gvRecParcelamentoResultado.Rows[0].Cells[0].Text.Replace(".", "") == this.txtCadIdTitRec.Text)
                    {
                        ImageButton imgbParcelamentoRec = new ImageButton();
                        imgbParcelamentoRec.CommandArgument = idTitrec + "|" + idCliente + "|" + this.hfRecParcelaIdFilial.Value;
                        this.Session["parcelamentoReceber"] = null;

                        imgbParcelamentoRec_Click(imgbParcelamentoRec, null);

                        tabTitrec.ActiveTabIndex = 1;
                    }
                }
                else
                {
                    string idClienteS = String.Empty;
                    if (idCliente != null)
                        idClienteS = Convert.ToString(idCliente);

                    if (situacao != 'A' || saldo <= 0 || this.hfRecParcelaIdCliente.Value != idClienteS)
                    {
                        if (gvRecParcelamento.Rows.Count > 0 && gvRecParcelamento.Enabled && Session["parcelamentoReceber"] != null)
                        {
                            List<TitrecVO> trVOLista = (List<TitrecVO>)this.Session["parcelamentoReceber"];
                            TitrecVO trVO = trVOLista.Find(trVOP => trVOP.idTitRec == idTitrec);

                            if (trVO != null)
                                trVOLista.Remove(trVO);

                            this.Session["parcelamentoReceber"] = trVOLista;
                            carregaParcelamentoRec(trVOLista);
                        }
                    }
                }
            }
        }

        protected void atualizaGvParcelamentoRec(int id, Decimal saldo)
        {
            if (gvRecParcelamento.Rows.Count > 0)
            {
                List<TitrecVO> trVOLista = (List<TitrecVO>)Session["parcelamentoReceber"];

                if (trVOLista.Exists(trVOP => trVOP.idTitRec == id))
                {
                    List<TitrecVO> trVOListaTemp = new List<TitrecVO>();
                    foreach (TitrecVO trVOItem in trVOLista)
                    {
                        if (trVOItem.idTitRec == id)
                        {
                            trVOItem.valorSaldo = saldo;
                        }
                        trVOListaTemp.Add(trVOItem);
                    }

                    Session["parcelamentoReceber"] = trVOListaTemp;

                    carregaParcelamentoRec(trVOListaTemp);
                }
            }
        }

        protected void atualizaFormRec()
        {
            foreach (string id in this.txtRecParcelaDocOri.Text.Split(','))
            {
                if (id == this.txtCadIdTitRec.Text)
                {
                    ImageButton btnVisualizar = new ImageButton();
                    btnVisualizar.CommandArgument = id;
                    imgbVisualizarRec_Click(btnVisualizar, null);
                }
            }
        }

        protected void btnRecExcluirParcelamento_click(object sender, EventArgs e)
        {
            int id = Convert.ToInt32(((ImageButton)sender).CommandArgument);

            List<TitrecVO> trVOLista = (List<TitrecVO>)Session["parcelamentoReceber"];
            trVOLista.RemoveAll(trVOP => trVOP.idTitRec == id);

            carregaParcelamentoRec(trVOLista);
        }

        protected void btnRecParcela_click(object sender, EventArgs e)
        {
            if (gvRecParcelamento.Rows.Count > 0)
            {
                if (this.txtRecParcelaSaldo.Text != "0,00" && this.txtRecParcelaSaldo.Text != "0" && !String.IsNullOrEmpty(this.txtRecParcelaSaldo.Text))
                {
                    Decimal saldoTotal = Decimal.Parse(txtRecParcelaSaldo.Text);
                    int qtdParcelas = int.Parse(txtRecParcelaQtd.Text);

                    Decimal valorParcelas = saldoTotal / qtdParcelas;
                    valorParcelas = Math.Round(valorParcelas, 2);

                    TitrecVO trVO = TitrecVO.CreateVO();
                    trVO.nrDoc = "Titulos - " + txtRecParcelaDocOri.Text;
                    trVO.nrDocOri = txtRecParcelaDocOri.Text;
                    trVO.vcto = Convert.ToDateTime(txtRecParcelaVencimento.Text);
                    if (!String.IsNullOrEmpty(hfRecParcelaIdCliente.Value))
                        trVO.idCliente = Convert.ToInt32(hfRecParcelaIdCliente.Value);
                    trVO.idFilial = Convert.ToInt32(hfRecParcelaIdFilial.Value);
                    trVO.situacao = 'A';
                    trVO.cadastradoPor = usuarioVO.user;
                    trVO.cadastro = DateTime.Now;
                    trVO.editadoPor = usuarioVO.user;
                    trVO.edicao = DateTime.Now;

                    try
                    {
                        this.SgiDAOT.transactionBegin();

                        List<TitrecVO> trVOLista = new List<TitrecVO>();

                        for (int i = 0; i < qtdParcelas; i++)
                        {
                            Decimal parcela = valorParcelas;
                            if (i + 1 == qtdParcelas)
                                parcela = saldoTotal;
                            else
                                saldoTotal -= valorParcelas;

                            trVO.valor = parcela;
                            trVO.valorDescC = 0;
                            trVO.valorJuroC = 0;
                            trVO.valorRec = 0;
                            trVO.valorSaldo = parcela;

                            trVO.idTitRec = (int)this.SgiDAOT.newTitrec(trVO);
                            this.SgiDAOT.newTitrechist(logTitrec(null, trVO));

                            TitrecVO trVOTemp = TitrecVO.CreateVO();
                            trVOTemp = this.SgiDAOT.getTitrec(trVO.idTitRec);

                            trVOLista.Add(trVOTemp);

                            trVO.vcto = trVO.vcto.AddMonths(1);
                        }

                        List<TitrecVO> trVOListaParcelamento = new List<TitrecVO>();

                        foreach (string idTitrecOriString in trVO.nrDocOri.Split(','))
                        {
                            int idTitrecOri = Convert.ToInt32(idTitrecOriString);

                            trVO = this.SgiDAOT.getTitrec(idTitrecOri);
                            trVO.situacao = 'F';
                            trVO.valorDescC += trVO.valorSaldo;
                            trVO.valorSaldo = 0;
                            trVO.editadoPor = usuarioVO.user;
                            trVO.edicao = DateTime.Now;

                            this.SgiDAOT.setTitrec(trVO);

                            trVOListaParcelamento.Add(trVO);

                            this.SgiDAOT.newTitrechist(logTitrecParcelamento(trVO, this.txtRecParcelaDocOri.Text, this.txtRecParcelaSaldo.Text, this.txtRecParcelaQtd.Text, this.txtRecParcelaVencimento.Text));
                        }

                        atualizaFormRec();
                        tabTitrec.ActiveTabIndex = 4;

                        carregaParcelasRec(trVOLista);
                        Session["parcelamentoReceberParcela"] = trVOLista;
                        Session["parcelamentoReceber"] = trVOListaParcelamento;
                        carregaParcelamentoRec(trVOListaParcelamento);
                        btnPesquisaRec_Click(null, null);

                        gvRecParcelamento.Enabled = false;

                        this.txtRecParcelaSaldo.Text = "0,00";
                        this.txtRecParcelaQtd.Text = "1";
                        this.txtRecParcelaVencimento.Text = DateTime.Now.ToShortDateString();

                        this.SgiDAOT.transactionCommit();

                    }
                    catch (Exception ex)
                    {
                        if (this.SgiDAOT != null)
                            this.SgiDAOT.transactionRollBack();
                        Util.ExibeAlert(this, "Registro NÃO salvo! Erro: " + ex.Message);
                    }
                }
                else
                {
                    Util.ExibeAlert(this, "Titulo não parcelado, saldo total menor ou igual a zero!");
                }
            }
            else
            {
                Util.ExibeAlert(this, "Nenhum título para parcelar");
            }
        }

        protected void btnRecParcelaLimpar_click(object sender, EventArgs e)
        {
            Session["parcelamentoReceber"] = null;
            Session["parcelamentoReceberParcela"] = null;
            carregaParcelamentoRec(null);
            carregaParcelasRec(null);
        }

        protected void imgbRecParcelasAlterar_Click(object sender, ImageClickEventArgs e)
        {
            if (gvRecParcelamentoResultado.Rows.Count <= 0)
                return;

            try
            {
                this.SgiDAOT.transactionBegin();
                foreach (GridViewRow row in gvRecParcelamentoResultado.Rows)
                {
                    HiddenField hfRecParcelamentoIdTitrec = (HiddenField)row.FindControl("hfRecParcelamentoIdTitrec");

                    int idTitrec = Convert.ToInt32(hfRecParcelamentoIdTitrec.Value);

                    TitrecVO trVO = this.SgiDAOT.getTitrec(idTitrec);

                    TextBox txtRecParcelamentoNrDoc = (TextBox)row.FindControl("txtRecParcelamentoNrDoc");
                    TextBox txtRecParcelamentoVencimento = (TextBox)row.FindControl("txtRecParcelamentoVencimento");
                    TextBox txtRecParcelamentoValor = (TextBox)row.FindControl("txtRecParcelamentoValor");

                    trVO.nrDoc = txtRecParcelamentoNrDoc.Text;
                    trVO.vcto = Convert.ToDateTime(txtRecParcelamentoVencimento.Text);

                    Decimal valor = 0;

                    if (!String.IsNullOrEmpty(txtRecParcelamentoValor.Text))
                        valor = Convert.ToDecimal(txtRecParcelamentoValor.Text);

                    trVO.valor = valor;
                    trVO.valorSaldo = valor;

                    txtRecParcelamentoValor.Text = valor == 0 ? "0,00" : Convert.ToString(valor);

                    decimal resultado = (decimal)((trVO.valor + trVO.valorJuroC) - (trVO.valorRec + trVO.valorDescC));

                    if (resultado >= 0)
                    {
                        TitrecVO trVOriginal = this.SgiDAOT.getTitrec(idTitrec);
                        this.SgiDAOT.setTitrec(trVO);

                        TitrechistVO trhVO = logTitrec(trVOriginal, trVO);
                        if(trhVO != null)
                            this.SgiDAOT.newTitrechist(trhVO);

                        if (trVO.idTitRec == (!String.IsNullOrEmpty(this.txtCadIdTitRec.Text) ? Convert.ToInt32(this.txtCadIdTitRec.Text) : -1))
                        {
                            ImageButton imgbVisualizarRec = new ImageButton();
                            imgbVisualizarRec.CommandArgument = Convert.ToString(trVO.idTitRec);
                            imgbVisualizarRec_Click(imgbVisualizarRec, null);

                            tabTitrec.ActiveTabIndex = 4;
                        }

                        saldoRecParcelamento += (Decimal) trVO.valorSaldo;
                    }
                    else
                    {
                        Label lblRecParcelamentoNumParcelar = (Label) row.FindControl("lblRecParcelamentoNumParcelar");
                        Util.ExibeAlert(this, "O valor do saldo não pode ser menor que zero! Altere o valor da parcela " + lblRecParcelamentoNumParcelar.Text + "ª !");
                        break;
                        return;
                    }

                }
                atualizaValorTotalRec();
                Util.ExibeAlert(this, "Registro salvo com sucesso!");
                this.SgiDAOT.transactionCommit();
            }
            catch (Exception ex)
            {
                if (this.SgiDAOT != null)
                    this.SgiDAOT.transactionRollBack();
                Util.ExibeAlert(this, "Registro NÃO salvo! Erro: " + ex.Message);
            }
            
        }

        protected void atualizaValorTotalRec()
        {
            lblRecParcelamentoValorTotal.Text = "Valor Total: " + saldoRecParcelamento;
        }

        #endregion

        #region ParcelamentoXTitrechist

        protected TitrechistVO logTitrecParcelamento(TitrecVO titrecVO, string tituloOriginarioS, string valorTotal, string qtdParcelas, string dataPrimeiroPag)
        {
            string acao = String.Empty;
            StringBuilder para = new StringBuilder();

            acao = "Parcelamento";
            para.Append("ID => " + titrecVO.idTitRec);
            para.Append(", ID Titulo(s) Originario => " + tituloOriginarioS);
            para.Append(", ID Filial => " + titrecVO.idFilial);
            para.Append((titrecVO.idCliente != (int)-1 && titrecVO.idCliente != null ? ", ID Cliente => " + titrecVO.idCliente : ""));

            para.Append(", Valor Título Parcelamento => " + valorTotal);
            para.Append(", Quantidade de Parcelas => " + qtdParcelas);
            para.Append(", Data do Primeiro Pagamento => " + dataPrimeiroPag);
            para.Append(", Desconto Atual do Título => " + titrecVO.valorDescC);
            para.Append(", Saldo Atual do Título => 0,00");

            TitrechistVO trhVO = null;

            trhVO = TitrechistVO.CreateVO();

            trhVO.titRecAcao = acao;
            trhVO.titRecHist = para.ToString();
            trhVO.idTitRec = (int)titrecVO.idTitRec;

            trhVO.cadastradoPor = usuarioVO.user;
            trhVO.cadastro = DateTime.Now;
            trhVO.editadoPor = usuarioVO.user;
            trhVO.edicao = DateTime.Now;


            return trhVO;

        }

        #endregion
    }
}
